/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package ua.lviv.franko.matrix;

import java.util.ArrayList;
import java.util.List;

/**
 * 
 * @author marko
 */
public class Array implements IRow {
	protected List<Integer>	indexes	= new ArrayList<Integer>();
	protected List<Double>	values	= new ArrayList<Double>();

	public void addValue(int num, double value) {
		int i = indexes.indexOf(num);
		if (i > -1) {
			values.set(i, values.get(i) + value);
		} else {
			indexes.add(num);
			values.add(value);
		}
	}

	public List<Integer> getIndexes() {
		return this.indexes;
	}

	public double getValue(int num) {
		int i = indexes.indexOf(num);
		if (i != -1)
			return values.get(i);
		return 0;
	}

	public List<Double> getValues() {
		return values;
	}

	public void getValues(List<Integer> indexes, List<Double> values) {
		indexes = this.indexes;
		values = this.values;
	}

	public void getValues(int[] indexes, double[] values) {
		indexes = new int[this.indexes.size()];
		values = new double[this.values.size()];
		for (int i = this.indexes.size() - 1; i > -1; i--) {
			indexes[i] = this.indexes.get(i);
			values[i] = this.values.get(i);
		}
	}

	public void removeCell(int pos) {
		int temppos = indexes.indexOf(pos);
		if (temppos > -1) {
			indexes.remove(temppos);
			values.remove(temppos);
		}
		for (int i = 0; i < indexes.size(); i++) {
			if (indexes.get(i) > pos) {
				indexes.set(i, indexes.get(i) - 1);
			}
		}
	}

	public void setValue(int num, double value) {
		int i = indexes.indexOf(num);
		if (value == 0) {
			if (i != -1) {
				indexes.remove(i);
				values.remove(i);
			}
			return;
		}
		if (i != -1) {
			values.set(i, value);
		} else {
			indexes.add(num);
			values.add(value);
		}
	}

}
